<html>
<script>
    // function typeAndValue(x) {
    //     if (x == null) {
    //         switch (x.constructor) {
    //             case Number: return "Number: " + x;
    //             case String: return "String: " + x + "'";
    //             case Date: return "Date: " + x;
    //             case RegExp: return "RegExp: " + x;
    //             case Complex: return "Complex: " + x;
    //         }
    //     }
    // }



    // 利用鸭式辩型实现的函数
    // 如果o实现了除了第一个参数之外所表现的方法，则返回true
    function quacks(o /*, ... */) {
        for (var i = 1; i < arguments.length; i++) { // 遍历o之后的所有参数
            var arg = arguments[i];
            switch (typeof arg) {
                case 'sting':
                    if (typeof o[arg] !== "function")
                        return false;
                    continue;

                case 'function':
                    arg = arg.prototype;
                case 'object':
                    for (var m in arg) {
                        if (typeof arg[m] !== "function") continue;  // 跳过不是方法的属性
                        if (typeof o[m] !== "function") return false;
                    }
            }

        }
        // 如果程序能执行到这里，说明o实现了所有的方法
        return true;
    }

</script>


<head>
    <title>放置文章标题</title>
</head>

<body>

</body>

</html>